package com.liangtian.mdm.dm.attribute.dao;

import com.liangtian.mdm.base.BaseDao;
import com.liangtian.mdm.dm.attribute.model.Attribute;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

@Repository
public interface AttributeDao extends BaseDao<Attribute> {

    /**
     * 属性列表页面数据查询
     *
     * @param attribute
     * @return
     */
    public List<Attribute> selectAttributePageByCondition(String modelId);

    /**
     * 根据属性id删除属性
     *
     * @param attrId
     * @return
     */
    public int batchDeleteAttrubute(Map<String, Object> map);

    /**
     * 根据属性modelId删除属性
     *
     * @param attrId
     * @return
     */
    public int batchDeleteAttrubuteByModelId(Map<String, Object> map);

    /**
     * 新增
     *
     * @param attribute
     */
    public void insertAttrubute(Attribute attribute);

    /**
     * 查询同一模型列的编号
     *
     * @param modelId
     * @return
     */
    public String selectColumnIndexByModelId(String modelId);

    /**
     * 校验同一模型属性名称重复
     *
     * @param map
     * @return
     */
    public int checkAttrName(Map<String, Object> map);

    /**
     * 编辑时校验同一模型属性名称重复
     *
     * @param map
     * @return
     */
    public int checkAttrNameEdit(Map<String, Object> map);

    public int copyAttrubute(Map<String, Object> map);

    /**
     * 编辑
     *
     * @param attribute
     * @return
     */
    public int updateAttribute(Attribute attribute);

    /**
     * 逻辑删除属性
     *
     * @param id
     * @return
     */
    public int updateAttributeIsDel(List<String> idList);

    /**
     * 逻辑删除属性删除模型时
     *
     * @param id
     * @return
     */
    public int updateAttributeIsDelDelModel(List<String> idList);

    /**
     * 通过模型ID 查询模型的属性
     *
     * @param modelId
     * @return
     */
    List<Attribute> queryAttributeListByModelId(String modelId);

    /**
     * 根据id查询
     *
     * @param id
     * @return
     */
    Attribute selectAttributeById(String id);

    /**
     * 查询数据来源属性(列)
     *
     * @param model_id
     * @return
     */
    public List<Attribute> queryModelTable4Column(String model_id);

    /**
     * @param attrLst
     * @desc 批量插入属性
     */
    void insertAttributes(List<Attribute> attrLst);


    /**
     * 根据am_attribute表和am_attr_config表联合查询出来需要自动附码的am_attribute表的id和attr_column
     */
    public List<Attribute> queryAttributeFromConfig(String modelId);


    /**
     * 根据用户ID和modelId查询出来用户在移动端审核列表页面可以看到的属性
     */
    public List<Attribute> queryAttributeForMobileListShow(Map<String, Object> map);
}
